package com.book.book.service;

import com.book.book.domain.BookType;
import com.book.book.mapper.BookTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
public class BookcategoryService {
    @Autowired
    private BookTypeMapper bookTypeMapper;

    public BookType getTree() {
        List<BookType> allTypes = bookTypeMapper.selectAll();
        // 1. 找到根节点（假设 booktypeid=8 是根节点“全部类型”）
        BookType root = findRoot(allTypes);
        if (root == null) {
            return null; // 无数据时返回空
        }
        // 2. 构建树形结构
        buildTree(root, allTypes);
        return root;
    }

    // 查找根节点（booktypeid=8）
    private BookType findRoot(List<BookType> allTypes) {
        for (BookType type : allTypes) {
            if (type.getBooktypeid() != null && type.getBooktypeid() == 8) {
                return type;
            }
        }
        return null;
    }

    // 递归构建树形结构（子节点是除根节点外的其他分类，简单处理：根节点下挂所有其他分类）
    private void buildTree(BookType parent, List<BookType> allTypes) {
        List<BookType> children = new ArrayList<>();
        for (BookType type : allTypes) {
            // 排除根节点自身，其他作为子节点
            if (type.getBooktypeid() != null && type.getBooktypeid() != parent.getBooktypeid()) {
                children.add(type);
            }
        }
        parent.setChildren(children);
        // 若需要子节点再嵌套子分类（比如有多级分类），可继续递归：
        // for (BookType child : children) {
        //      buildTree(child, allTypes);
        // }
    }

    @Transactional
    public void saveOrUpdate(BookType bookType) {
        if (bookType.getBooktypeid() == null) {
            bookTypeMapper.insert(bookType);
        } else {
            bookTypeMapper.updateByPrimaryKeySelective(bookType);
        }
    }

    @Transactional
    public void del(Integer booktypeid) {
        bookTypeMapper.deleteByPrimaryKey(booktypeid.longValue()); // Mapper接受Long，这里转换
    }

    public Boolean validateBookTypeName(String booktypename, Integer booktypeid) {
        List<BookType> allTypes = bookTypeMapper.selectAll(); // 获取所有分类

        for (BookType type : allTypes) {
            // 如果遍历到的分类名称与待验证的名称相同
            if (type.getBooktypename().equals(booktypename)) {
                // 对于修改场景，如果匹配到的分类就是当前修改的分类，则允许（用户可能没有修改名称）
                if (booktypeid != null && type.getBooktypeid().equals(booktypeid)) {
                    return true; // 是当前修改的分类，名称未变，合法
                }
                // 对于新增场景，或者修改场景下名称与其它分类重复，则返回false
                return false; // 名称已存在且不是当前修改的分类，或是在新增时重复
            }
        }
        return true; // 遍历完所有分类，没有找到重复名称，可用
    }
}